커널 (컴퓨팅)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
커널은 운영 체제의 핵심 부분으로, 하드웨어와 프로세스의 보안, 자원 관리, 하드웨어 추상화를 담당한다. CPU, 메모리, 입출력 장치 등 컴퓨터 자원을 관리하고, 프로세스 간 동기화 및 통신 수단을 제공한다. 초기 컴퓨터에서는 운영 체제 커널이 필수적이지 않았으나, 로더와 디버거의 등장으로 발전하였고, 시분할 시스템의 개발과 함께 보안 및 자원 관리의 중요성이 커졌다. 유닉스 운영 체제에서 커널은 시스템의 핵심 부분을 담당하며, 모놀리식 커널, 마이크로커널, 하이브리드 커널, 엑소커널 등 다양한 종류가 존재한다. 모놀리식 커널은 성능이 좋지만, 버그 발생 시 시스템 전체가 다운될 수 있으며, 마이크로커널은 안정성이 높지만 IPC 오버헤드로 성능 저하가 발생할 수 있다. 하이브리드 커널은 두 방식의 장점을 결합한 형태로, 엑소커널은 하드웨어 추상화에 대한 선택지를 다양하게 한다. 커널 설계는 보안, 프로세스 협력, 입출력 장치 관리 등을 고려하며, 시스템 호출을 통해 커널의 서비스에 접근할 수 있다.
더 읽어볼만한 페이지
- 운영 체제 커널 - 로더 (컴퓨팅)
로더는 운영 체제에서 프로그램을 메모리에 적재하고 실행하는 소프트웨어 구성 요소이며, 유닉스와 윈도우 등에서 실행 파일의 유효성 검사, 메모리 매핑, DLL 초기화 등의 작업을 수행한다. - 운영 체제 커널 - 커널 패닉
커널 패닉은 운영 체제의 치명적인 오류로, 시스템 작동을 즉시 중단시키며, 하드웨어 고장, 소프트웨어 버그 등 다양한 원인으로 발생한다. - 소프트웨어에 관한 - 크래프톤
크래프톤은 배틀그라운드 시리즈의 성공을 기반으로 성장한 대한민국의 비디오 게임 개발 및 퍼블리싱 기업이자 지주회사로, 여러 자회사를 통해 다양한 게임을 개발 및 서비스하며 글로벌 시장에서 영향력을 확대하고 있다. - 소프트웨어에 관한 - 넷마블
넷마블은 2000년 방준혁 의장이 설립하여 게임 서비스 사업으로 성장, CJ그룹 편입 및 유가증권시장 상장을 거쳐 '리니지2 레볼루션' 성공과 해외 시장 진출 확대를 이루었으나, 최근 메타버스 사업 실패 및 구조조정 등의 어려움 속에서 사업 다각화를 시도하며 향후 행보가 주목되는 대한민국의 게임 기업이다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 운영체제 서비스 관리
커널 (컴퓨팅) | |
---|---|
지도 정보 | |
기본 정보 | |
종류 | 운영 체제의 핵심 |
역할 | 시스템 자원 관리 하드웨어와 소프트웨어 간의 중재 사용자 애플리케이션에 대한 추상화 제공 |
주요 기능 | 프로세스 관리 메모리 관리 장치 드라이버 인터럽트 처리 시스템 호출 처리 |
핵심 구성 요소 | 프로세스 관리자 메모리 관리자 파일 시스템 네트워크 스택 장치 드라이버 |
구조 | |
모놀리식 커널 | 모든 서비스가 커널 공간에 존재 높은 성능 Linux, FreeBSD, macOS 등이 사용 |
마이크로커널 | 최소한의 기능만 커널 공간에 존재 유연성 및 확장성 QNX, L4 등이 사용 |
하이브리드 커널 | 모놀리식과 마이크로커널의 장점 결합 Microsoft Windows 등이 사용 |
나노커널 | 극도로 작은 커널 특수 목적 시스템에 사용 |
커널 개발 | |
주요 개발 언어 | C 언어 어셈블리어 |
개발 방식 | 오픈 소스 커널 상업용 커널 |
기타 | |
관련 용어 | 커널 패닉 커널 모드 사용자 모드 |
2. 커널의 역할
커널은 운영 체제의 핵심 부분이므로, 커널의 역할 역시 운영 체제의 핵심 역할이라 할 수 있다.
- 보안: 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
- 자원 관리: 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라 한다.
- 추상화: 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근하는 것은 문제를 매우 복잡하게 만들 수 있다. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들을 구현한다. 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다.
대부분의 운영 체제(OS)는 커널을 포함하고 있다. 하드웨어와 소프트웨어 간의 통신을 관리하는 소프트웨어인 커널은 성능, 메모리 효율, 보안, 프로세서의 아키텍처 등 복잡하게 얽힌 문제에 대한 절충적인 해결책이다.
대부분의 경우 부트로더가 커널을 특권 모드의 프로세스로 실행한다.[62] 하지만 초기화가 완료되면 커널은 일반적인 프로세스로 존재하지 않고, 디스크 접근과 같은 높은 권한 레벨을 필요로 하는 처리가 필요할 때 사용자 프로그램에서 호출되는 기능의 집합체로 존재하게 된다. 커널의 처리 흐름은 사용자 프로세스의 처리 흐름의 연장선상에 있으며, 시스템 콜을 통해 커널로 처리가 넘어가고, 종료되면 사용자로 돌아온다. 초기화 시의 컨텍스트는 그대로 사라지도록 설계하는 경우도 있지만, 프로세서가 할 일이 없을 때 실행되는 코드인 "아이들 프로세스" 또는 "collects"라고 불리는 것에 활용하는 설계를 하는 경우도 있다. 절전을 위해 프로세서가 "휴식"하는 명령어를 반복하는 코드로 하는 경우가 많다.
커널 개발은 프로그래밍 중에서도 복잡하고 어려운 작업 중 하나로 여겨진다. 운영 체제의 핵심 부분이라는 것은 높은 성능을 요구하는 가장 중요한 소프트웨어이며, 올바르게 설계하고 구현하는 것은 어렵다. 커널은 사용자 프로그램의 호환성 및 이식성을 고려해야 하는 등 설계에 제약이 있으며, 이것이 개발을 더욱 어렵게 만든다.
3. 커널의 역사
컴퓨터를 실행하는 데 운영 체제(그리고 커널)가 반드시 필요한 것은 아니다. 1950년대와 1960년대 초, 대부분의 초기 컴퓨터는 베어 메탈 머신에 프로그램을 직접 로드하고 실행하는 방식으로 작동했으며, 서로 다른 프로그램을 실행할 때마다 재설정하고 다시 로드해야 했다. 이후 프로그램 로더 및 디버거와 같은 작은 보조 프로그램들이 실행 사이에 메모리에 남아 있거나 ROM에서 로드되면서 초기 운영 체제 커널의 기반이 되었다. "베어 메탈" 방식은 오늘날에도 일부 비디오 게임 콘솔 및 임베디드 시스템에서 사용되지만,[45] 일반적으로 최신 컴퓨터는 최신 운영 체제와 커널을 사용한다.
1969년, RC 4000 멀티프로그래밍 시스템은 "다양한 목적을 위한 운영 체제를 질서정연한 방식으로 구축할 수 있는" 작은 핵심 시스템 설계 철학을 도입했는데,[46] 이는 마이크로커널 방식이라고 불린다.
3. 1. 초창기 커널
초창기 컴퓨터에서 운영 체제 커널은 필수적인 것이 아니었다. 초기 프로그램은 하드웨어 추상화나 운영 체제의 지원 없이 컴퓨터만으로 불러들인 다음 실행할 수 있었으며, 이것은 초창기 컴퓨터들의 일반적인 운영 방식이었다. 다른 프로그램을 실행하기 위해서는 컴퓨터의 전원을 껐다가 켜서 다시 입력 자료를 읽어들여야 했다. 이러한 과정이 반복되면서 사람들은 로더와 디버거 같은 작은 프로그램들이 상주해 있는 것이 다른 프로그램으로 교체하거나 새로운 프로그램을 개발하는 데 유리하다는 사실을 알게 되었다. 이와 같은 로더, 디버거들이 초기 운영 체제 커널의 기초가 되었다.[104]3. 2. 시분할 시스템
유닉스 이전 10년 동안 컴퓨터는 급격하게 성능이 향상되었고, 기계의 미사용 시간을 활용하는 방법이 요구되었다. 이 기간의 주요 개발 중 하나가 시분할 시스템이다. 시분할 시스템은 여러 명의 사용자가 각각 CPU의 시간 조각(time slice)을 할당받는 방식이다.[47][106]시분할 시스템의 개발은 많은 문제를 야기했다. 한 가지 문제는 대학교 사용자들이 CPU 시간을 얻기보다 시스템을 해킹하려는 경향이 있다는 점이다. 이 때문에 컴퓨터 보안과 접근 제어가 1965년 멀틱스 프로젝트의 중요한 과제가 되었다.[48][107] 또 다른 문제는 계산 자원의 적절한 관리 방법이었다. 사용자들은 계산 자원을 사용하지 않고 화면만 응시하는 데 대부분의 시간을 보냈고, 시분할 방식에서는 그러한 CPU 시간을 다른 사용자에게 할당해야 한다고 생각되었다. 궁극적으로 메모리 계층의 다층화가 진행되면서 자원 분할이 가상 메모리 시스템의 개발로 이어졌다.
3. 3. 유닉스와 리눅스
유닉스는 1970년대에 개발된 운영 체제로, 프로그래머들은 모든 장치를 파일로 모델링하여 시스템 작동을 간소화했다.[49] 이러한 접근 방식은 파이프 개념을 통해 작은 프로그램들을 연결하여 복잡한 작업을 수행하는 유연성을 제공했다. 유닉스 운영 체제는 유틸리티 프로그램 집합과 커널로 구성되며, 커널은 특권 모드에서 실행되어 프로그램 로더 및 감독자 역할을 수행했다.[49]시간이 지나면서 컴퓨팅 모델이 변화함에 따라 유닉스의 "모든 것을 파일로" 처리하는 방식은 GUI와 네트워킹 환경에서는 한계를 보였다. 또한, 컴퓨터 성능 향상과 함께 유닉스 커널 코드는 1970년대 10만 줄에서, 리눅스 커널의 경우 1,300만 줄 이상으로 매우 복잡해졌다.[51]
현대의 유닉스 파생 운영 체제들은 일반적으로 모듈 로딩이 가능한 모놀리식 커널을 기반으로 한다. 리눅스 배포판의 리눅스 커널, FreeBSD, DragonFly BSD, OpenBSD, NetBSD, macOS 등이 이러한 예시에 해당한다.[52]
3. 4. 마이크로커널의 등장
카네기 멜론 대학교의 리처드 래시드가 개발한 매크(Mach)는 가장 잘 알려진 범용 마이크로커널이다. 하지만 이 외에도 더욱 특정한 목표를 가진 다른 마이크로커널들이 개발되었다. L4 마이크로커널 계열(L4 microkernel family)(주로 L3 및 L4 커널)은 마이크로커널이 반드시 느리지 않다는 것을 보여주기 위해 만들어졌다.[55] 피아스코(Fiasco) 및 피스타치오(Pistachio)와 같은 최신 구현은 다른 L4 프로세스 옆에 리눅스를 별도의 주소 공간에서 실행할 수 있다.[56][57]또한, 큐엔엑스(QNX)는 주로 임베디드 시스템에서 사용되는 마이크로커널이며,[58] 미닉스(MINIX)는 원래 교육 목적으로 만들어졌지만, 현재는 고신뢰성(highly reliable) 및 자가 치유(self-healing) 마이크로커널 OS를 목표로 하는 오픈 소스 소프트웨어이다.
4. 커널의 종류
커널은 구조와 기능에 따라 여러 종류로 나뉜다.
- '''단일형 커널'''(monolithic kernel): 커널의 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 것이다. 운영 체제 개발자 입장에서 유지 보수가 어렵지만 성능이 좋은 편이다.
- '''마이크로커널'''(microkernel): 하드웨어 추상화에 대한 간결한 집합을 제공하고, 서버라고 불리는 응용 소프트웨어를 통해 더 많은 기능을 제공한다.
- '''혼합형 커널'''(hybrid kernel): 마이크로커널과 비슷하지만, 성능 향상을 위해 일부 코드를 커널 공간에 추가하였다. '''수정 마이크로커널'''이라고도 한다.
- '''나노커널'''(nanokernel): 거의 모든 서비스를 책임진다.
- '''엑소커널'''(exokernel): 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 엑소커널 시스템에서는 보통 커널이 아닌 라이브러리가 단일형 커널 수준의 추상화를 제공한다.
모놀리식 커널은 모든 코드를 같은 주소 공간(커널 공간)에서 실행하지만, 마이크로 커널은 대부분의 서비스를 사용자 공간에서 실행하여 코드베이스의 유지 관리성과 모듈성을 높인다.[4] 대부분의 커널은 이 두 가지 범주에 정확히 들어맞지 않고, 그 중간 형태인 하이브리드 커널로 분류된다.
"메커니즘과 정책의 분리" 원칙은 마이크로 커널과 모놀리식 커널 철학의 중요한 차이점이다.[28][29] 여기서 "메커니즘"은 다양한 정책 구현을 지원하는 것이고, "정책"은 특정 "작동 방식"을 의미한다. 예를 들면 다음과 같다.
- '''메커니즘:''' 사용자 로그인 시도는 인증 서버로 라우팅된다.
- '''정책:''' 인증 서버는 데이터베이스에 저장된 암호와 비교하여 확인하는 암호를 요구한다.
퍼 브린치 한센은 메커니즘과 정책의 분리를 주장했다.[5][25]
4. 1. 모놀리식 커널 (단일형 커널)
단일형 커널(Monolithic kernel)은 하드웨어 위에 높은 수준의 가상 계층을 정의한다. 이 계층은 기본 연산 집합과 시스템 콜로 구성되며, 관리자 모드에서 작동하는 모듈을 통해 프로세스 관리, 동시성, 메모리 관리 등 운영 체제 서비스를 구현한다.[23]
모든 모듈이 같은 주소 공간에서 실행되기 때문에 코드의 집적도는 매우 조밀하지만, 수정하기 어렵고 한 모듈의 버그는 시스템 전체를 멈추게 할 수 있다는 단점이 있다.[15] 그러나 구현이 신뢰할 수 있을 정도로 완성되면 구성 요소의 내부 집적이 내부 시스템 이용을 효과적이게 하여 높은 효율을 보인다.[28][29] 단일형 커널 지지자들은 코드의 정확성 여부와 그런 코드(부정확한 코드)가 커널에 포함되었는지를 확인할 수 있다는 점이 마이크로커널에 비해 조금 더 우위에 있다고 주장한다.[5][25]
리눅스, FreeBSD, 솔라리스와 같은 최신의 단일형 커널은 실행 모듈을 실시간으로 읽어들일 수 있다. 이러한 특징은 커널이 허용하는 범위 내에서 손쉽게 확장할 수 있게 하며, 커널 공간의 코드 양을 최소한으로 유지시켜 준다.[30][31][32]
마이크로소프트 윈도우 NT 제품군(NT, 2000, XP, 2003, 비스타, 7, 8, 8.1, 10)은 처음에는 하이브리드 커널이었으나 나중에 나온 것들은 단일형 커널로 바뀌었다. 윈도우 NT 시리즈는 상위의 서비스들을 '''NT executive'''이라는 서버로 구현하였다. Win32 특성은 처음에는 사용자 모드의 서버 형태로 구현되었으나, 최근 버전에서는 관리자 주소 영역으로 이동하였다. 다양한 서버들이 로컬 프로시저 콜(LPC: Local Procedure Call)이라 불리는 주소 영역간 매커니즘을 통해 통신하며, 성능을 최적화하기 위해 공유 메모리를 이용한다.[33]
모놀리식 커널에서는 모든 운영체제 서비스가 하나의 커널 공간에 존재하며, 커널 스레드에서 실행된다. 이 방법은 강력한 하드웨어 접근을 제공한다. 유닉스 개발자인 켄 톰프슨은 모놀리식 커널이 마이크로커널보다 구현이 용이하다고 언급했다.[94] 주요 단점은 시스템 구성 요소 간의 복잡한 의존 관계이다. 예를 들어, 장치 드라이버에 버그가 있으면 시스템 전체가 충돌할 수 있으며, 커널이 커질수록 유지보수가 매우 어려워진다.
유닉스 계열 운영체제가 전통적으로 채택해 온 모놀리식 커널은 운영체제 핵심 기능과 장치 드라이버를 모두 포함하고 있었다. 장치 드라이버, 스케줄러, 메모리 관리, 파일 시스템, 네트워크 프로토콜 스택 등 많은 프로그램이 필요로 하지만 라이브러리로서 사용자 공간에서 실행할 수 없는 기능은 모두 커널 공간에 배치되었다. 이러한 모든 서비스에 대한 접근을 가능하게 하기 위해 많은 시스템 콜이 애플리케이션에 제공된다.
필요하지 않은 하위 시스템을 포함하여 처음부터 로드되는 모놀리식 커널은 보다 일반적인 의미에서 특정 하드웨어용으로 설계된 것보다 조정이 가능하다. 리눅스나 FreeBSD와 같은 현대의 모놀리식 커널은 유닉스 계열 운영체제이며, 런타임에 모듈을 로드하는 기능을 갖추고 있어 필요에 따라 기능을 쉽게 확장할 수 있으며, 동시에 커널 공간에서 작동하는 코드의 양을 최소화할 수 있다.
모놀리식 커널은 시스템 콜의 연장선상에서 작동하는 부분이 대부분이다. 시스템 콜은 일반적으로 테이블 구조로 유지되는 인터페이스이며, 디스크 조작과 같은 커널 내 하위 시스템에 대한 접근을 수행한다. 프로그램에서 라이브러리 루틴을 호출하면, 그 안에서 요청을 검사하고 복사하여 시스템 콜로 넘긴다. 따라서 그렇게 무거운 호출은 아니다. 리눅스 커널은 모놀리식이지만 상당히 작게 만들 수 있다. 이는 로드 가능 커널 모듈 기능과 쉬운 사용자 정의 때문이다. 실제로 플로피 디스크 한 장에 커널뿐만 아니라 많은 유틸리티를 탑재하여 그 자체로 완벽하게 작동하는 OS로 만들 수도 있다(가장 유명한 예로 muLinux가 있다). 이러한 커널을 소형화할 수 있는 능력 때문에 리눅스는 임베디드 시스템에서 빠르게 채택이 증가하고 있다(임베디드 리눅스).
이러한 커널은 운영체제의 핵심 기능과 장치 드라이버로 구성되며, 런타임에 모듈을 로드하는 기능을 갖추고 있다. 이를 통해 하위 하드웨어에 대한 풍부하고 강력한 추상화를 제공한다. 간단한 하드웨어 추상화의 작은 집합을 제공하고, 서버라고 하는 애플리케이션을 사용하여 추가 기능을 제공한다. 이 특정 방법으로 하드웨어 상의 고급 가상 인터페이스를 정의하고, 프로세스 관리, 병렬 처리 관리, 메모리 관리와 같은 수퍼바이저 모드에서 작동하는 몇 가지 모듈로 운영체제 서비스를 구현하여 시스템 콜로 호출할 수 있도록 한다.
모놀리식 커널의 장점은 다음과 같다.
- 관련 소프트웨어가 적으므로 더 빠르다.
- 커널은 하나의 소프트웨어이므로 소스 코드 양과 컴파일 후 실행 파일의 크기가 작아진다.
- 코드가 적으므로 버그가 적고, 결과적으로 보안 문제도 비교적 적다.
그러나 이러한 설계에는 다음과 같은 단점과 제약이 있다.
- 커널 내 코딩은 어렵다. 표준 C 라이브러리를 사용할 수 없고, 디버깅에는 GNU 디버거와 같은 소스 레벨 디버거가 필요하기 때문이다. 따라서 개발 중에는 컴퓨터를 자주 리부팅해야 한다. 이것은 단순히 개발자만의 문제가 아니다. 디버깅이 어렵다는 것은 버그를 수정하기 어렵다는 것이며, 커널에 버그가 남아 있기 쉽다는 것을 의미한다.
- 커널 내 버그가 심각한 부작용을 일으킨다. 커널 내 함수는 모두 권한 있는 상태로 작동하므로, 전혀 무관한 데이터 구조를 (커널 공간 내에서도 사용자 공간 내에서도) 쉽게 파괴할 수 있다. 모듈들은 동일 주소 공간에서 작동하므로 버그로 인해 시스템 전체가 다운될 수 있다.
- 커널이 비대해지기 쉽고, 비대해지면 유지보수가 어려워진다.
- 코드의 결합도가 강하고, 모듈화하여 분리하더라도 그 분리를 제대로 수행하기는 어렵다.
- 이식성이 낮다. 작동시키는 아키텍처마다 다시 작성해야 한다.
단일 커널(Monolithic kernel)은 모든 코드가 동일한 주소 공간(커널 공간)에서 실행하는 반면, 마이크로 커널은 대부분의 서비스를 사용자 공간에서 실행하려고 시도하여 코드베이스의 유지 관리성과 모듈성을 향상시킨다.[4]
주로 다음 운영 체제들의 커널이 단일형 커널인 것으로 알려져 있다.
4. 2. 마이크로커널
마이크로커널은 하드웨어 위에 매우 간결한 추상화를 정의한다. 스레드 관리, 주소 공간, 프로세스간 통신과 같은 작은 시스템 콜로 이루어져 있으며, 운영 체제의 기본 연산을 구현한다. 일반적으로 커널이 제공하는 네트워킹과 같은 다른 서비스들은 사용자 공간 프로그램인 '''서버'''로 구현한다.운영 체제는 서버를 다른 일반적인 프로그램처럼 간단히 시작하고 끌 수 있다. 네트워킹 지원이 필요 없는 작은 시스템에서는 간단히 서버를 끄면 된다. 이론적으로 마이크로커널에서 시스템은 더 안정적이다. 서버가 중단될 때 커널의 충돌이 아니기 때문에 단 하나의 프로그램만 종료하면 된다.
일반적으로 마이크로커널은 전통적인 디자인보다 성능이 떨어지는 경우가 많다. 응용 프로그램과 서버 간의 자료 교환을 위해 커널을 출입하는 문맥 교환 때문이다.
마이크로커널 방식에서는 OS의 다른 부분을 일반적인 애플리케이션처럼 고급 언어로 작성할 수 있으며, 동일한 커널 상에서 서로 다른 OS(의 인터페이스)를 사용할 수 있다.[85] 또한 동적으로 OS를 전환하거나 여러 OS를 동시에 사용할 수도 있다.[85]
마이크로커널은 모놀리식 커널보다 유지 보수가 용이하지만, 시스템 호출 횟수와 컨텍스트 스위칭 횟수가 증가하기 때문에 성능이 저하되는 경향이 있다.
“메커니즘과 정책의 분리” 원칙은 마이크로 커널과 모놀리식 커널 철학의 중요한 차이점이다.[28][29] 여기서 “메커니즘”은 여러 가지 다른 정책의 구현을 허용하는 지원을 의미하는 반면, 정책은 특정한 "작동 방식"이다. 예시는 다음과 같다.
- '''메커니즘:''' 사용자 로그인 시도는 인증 서버로 라우팅된다.
- '''정책:''' 인증 서버는 데이터베이스에 저장된 암호와 비교하여 확인하는 암호를 요구한다.
최소한의 마이크로 커널에는 매우 기본적인 정책만 포함되어 있으며,[29] 그 메커니즘은 커널 위에서 실행되는 것(운영 체제의 나머지 부분과 다른 응용 프로그램)이 어떤 정책을 채택할지 결정할 수 있도록 한다(메모리 관리, 고급 프로세스 스케줄링, 파일 시스템 관리 등).[5][25]
모놀리식 커널은 모든 코드를 동일한 주소 공간(커널 공간)에서 실행하는 반면, 마이크로 커널은 대부분의 서비스를 사용자 공간에서 실행하려고 시도하여 코드베이스의 유지 관리성과 모듈성을 향상시킨다.[4]
마이크로커널의 성능은 1980년대와 1990년대 초에 좋지 않았다.[38][39] 그러나 이러한 마이크로 커널의 성능을 실증적으로 측정한 연구는 그러한 비효율성의 원인을 분석하지 않았다.[38]
마이크로커널과 마이크로커널에 기반한 운영 체제의 예는 다음과 같다.
4. 3. 하이브리드 커널 (혼합형 커널)
하이브리드 커널은 기본적으로 마이크로 커널이지만, 성능 향상을 위해 일부 코드를 커널 공간에서 실행하도록 수정한 것이다. 이는 마이크로 커널 설계의 성능 한계를 인식한 개발자들이 선택한 절충안이다.
macOS의 커널인 XNU는 Mach 커널 3.0 마이크로 커널을 기반으로 하지만, 지연 현상을 줄이기 위해 BSD 커널의 일부 코드를 가져와 같은 주소 영역에서 실행한다.[41] 애플의 macOS는 OSF/1의 매커니즘 커널(OSFMK 7.3)과 FreeBSD의 모놀리식 커널을 기반으로 하는 XNU라는 하이브리드 커널을 사용한다.
Microsoft Windows NT 3.1, NT 3.5, NT 3.51, NT 4.0, 2000, XP, Vista, 7, 8, 8.1 및 10과 같은 대부분의 상용 운영 체제는 하이브리드 커널을 사용한다. Windows NT 아키텍처의 커널은 커널 자체에 창 관리자 및 IPC 관리자와 같은 작업이 포함되어 있고 클라이언트/서버 계층형 하위 시스템 모델을 사용하기 때문에 하이브리드 커널로 간주된다.[54]
DragonFly BSD는 비 Mach 기반 BSD OS 중 처음으로 하이브리드 커널 구성을 적용한 예이다.
하이브리드 커널의 예는 다음과 같다.
하이브리드 커널은 모놀리식 커널과 마이크로 커널 설계의 장점을 결합한 것이다. 메시지 전달 방식을 사용하고, 중요하지 않은 코드는 사용자 공간에 배치하지만, 성능상의 이유로 일부 코드는 커널 공간에 포함한다.
많은 기존의 모놀리식 커널은 모듈 기능을 추가하거나 사용하고 있다. 가장 잘 알려진 모듈형 커널은 리눅스 커널이다. 모듈형 커널은 코어 커널 바이너리에 내장되거나 필요에 따라 메모리에 로드되는 바이너리에 포함된 부분을 가질 수 있다.
하이브리드 커널의 장점은 다음과 같다.
- 모듈 내에서 작동하는 드라이버 개발 시간 단축. (커널이 불안정해지지 않는 한) 테스트를 위해 재부팅할 필요가 없다.
- 새 드라이버나 하위 시스템을 위해 전체 커널을 다시 컴파일할 필요 없이 필요에 따라 기능을 사용할 수 있다.
- 타사 기술의 빠른 통합.
일반적으로 모듈은 모듈 인터페이스를 사용하여 커널과 통신한다. 인터페이스는 일반화되어 있지만(특정 운영 체제에 따라 다름) 항상 모듈을 사용할 수 있는 것은 아니다. 장치 드라이버는 모듈 인터페이스가 제공하는 것보다 더 많은 유연성이 필요할 수 있다.
하이브리드 커널의 단점은 다음과 같다.
- 통과해야 할 인터페이스가 많아져 버그가 증가할 가능성이 있다(이는 더 많은 보안 취약성을 의미함).
- 일부 관리자는 심볼 차이와 같은 문제를 처리할 때 모듈을 유지 관리하는 것이 어려울 수 있다.
4. 4. 엑소커널

엑소커널은 운영 체제 설계에 대한 급진적인 신개념으로 말단 이론을 따르는 수직 구조의 운영 체제이다. 엑소커널은 개발자에게 강제적인 추상화를 줄여 하드웨어 추상화에 대해 선택지를 다양하게 하는 것을 목표로 한다. 엑소커널은 기능이 보호를 보장하는 것과 자원을 분배하는 것만 하기에 매우 작다.
Exokernel영어은 아직 실험적인 운영 체제 설계 방식이다. 다른 유형의 커널과는 달리, 원시 하드웨어의 보호 및 다중화 기능으로 제한되며, 애플리케이션을 개발하기 위한 하드웨어 추상화를 제공하지 않는다. 하드웨어 보호와 하드웨어 관리를 분리함으로써 애플리케이션 개발자는 각 프로그램에 대해 사용 가능한 하드웨어를 가장 효율적으로 사용하는 방법을 결정할 수 있다.
엑소커널 자체는 매우 작지만, 라이브러리 운영 체제(유니커널 참조)와 함께 제공되어 애플리케이션 개발자에게 기존 운영 체제의 기능을 제공한다. 엑소커널 기반 시스템의 주요 장점은 각기 다른 API를 내보내는 여러 라이브러리 운영 체제를 통합할 수 있다는 것이다. (예: 고급 UI 개발용 및 실시간 제어용)
4. 5. 노커널
TUNES 프로젝트(https://web.archive.org/web/20190602150238/http://tunes.org/)와 UnununiumOS(https://web.archive.org/web/20191030094512/http://unununium.org/)는 노커널[https://web.archive.org/web/20051025085132/http://cliki.tunes.org/No-Kernel] 실험이다. 노커널 소프트웨어는 단일 중앙 입구의 제약이 없다.5. 커널의 기능
커널은 운영 체제의 핵심 부분으로서, 컴퓨터 자원을 관리하고 다른 프로그램들이 이러한 자원을 사용할 수 있도록 하는 역할을 한다.[59] 주요 기능은 다음과 같다.
- 보안: 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
- 자원 관리: 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라 한다.
- 추상화: 다양한 하드웨어에 대해 일관성 있는 인터페이스를 제공하여 프로그래머가 여러 장비에서 작동하는 프로그램을 쉽게 개발할 수 있도록 돕는다. 하드웨어 추상화 계층(HAL)은 드라이버에 의존한다.
커널은 다음과 같은 주요 자원을 관리한다.
- CPU(프로세서): 프로그램 실행을 담당하며, 커널은 실행할 프로그램을 선택한다.
- 메모리: 프로그램과 데이터 저장 공간으로, 커널은 메모리를 할당하고 부족 상황에 대처한다.
- 입출력 장치: 키보드, HDD, USB 등 다양한 장치의 입출력 요청을 처리하고 추상화된 인터페이스를 제공한다.[65]
또한 커널은 프로세스 간 동기화와 프로세스 간 통신(IPC) 수단을 제공한다. 커널은 이러한 기능을 자체 구현하거나 다른 프로세스에 위임하며, 프로그램은 시스템 호출을 통해 커널 기능에 접근한다.[7]
5. 1. 프로세스 관리
커널의 주요 임무는 응용 소프트웨어의 실행을 가능하게 하고, 하드웨어 추상화 등의 지원 기능을 제공하는 것이다.프로세스는 응용 프로그램이 접근할 수 있는 메모리 영역을 정의한다.[66] 커널의 프로세스 관리는 하드웨어의 메모리 보호 메커니즘을 고려해야 한다.[67]
커널은 응용 프로그램을 실행하기 위해 주소 공간을 설정하고, 응용 프로그램 코드가 포함된 파일을 메모리에 로드하며, 프로그램 실행을 위한 콜 스택을 설정하고, 프로그램 내 지정된 위치로 제어를 넘겨 실행을 시작한다.[68]
멀티태스킹을 지원하는 커널은 사용자에게 실제 컴퓨터가 동시에 실행 가능한 프로세스 수보다 더 많은 프로세스가 동시에 실행되는 것처럼 보이게 한다. 일반적으로 시스템이 동시에 실행할 수 있는 프로세스 수는 시스템의 CPU 수와 같다(동시 멀티스레딩을 지원하는 경우는 예외).
선점형 멀티태스킹 시스템에서 커널은 각 프로그램에 타임 슬라이스(프로그램이 CPU에서 실행되는 연속 시간)를 할당하고, 프로세스 간에 빠르게 전환하여 사용자에게 프로세스들이 동시에 실행되는 것처럼 보이게 한다. 커널은 다음에 실행할 프로세스와 타임 슬라이스 길이를 결정하는 스케줄링 알고리즘을 가진다. 일반적으로 프로세스에는 우선순위가 설정된다. 커널은 또한 프로세스 간 통신(IPC) 수단을 제공한다. IPC에는 파이프, 공유 메모리, 메시지, RPC, 소프트웨어 인터럽트 등이 있다.
협력형 멀티태스킹도 있는데, 각 프로세스는 스스로 커널에 제어권을 반환할 때까지 중단 없이 실행을 계속할 수 있다. 커널에 제어권을 반환하는 것을 "yielding"이라고 하며, 프로세스 간 통신 시나 어떤 이벤트를 기다리는 경우에 수행되고, 그때 커널이 다른 프로세스를 실행시킨다. 오래된 마이크로소프트 윈도우나 맥 OS는 이 방식을 사용했지만, 컴퓨터 성능 향상에 따라 선점형 방식으로 전환했다.[69]
운영 체제는 멀티프로세싱(SMP 및 NUMA)을 지원할 수도 있다. 이 경우 여러 프로그램이나 스레드가 여러 프로세서에서 작동한다. 이러한 시스템에서 커널을 작동시키려면 "재진입 가능" 또는 "인터럽트 가능"하도록 상당한 수정이 필요하다. 즉, 어떤 처리를 하는 중에도 다른 요청을 받을 수 있다는 것을 의미한다. 이 수정이 가능하면 서로 다른 프로세서에서 작동하는 프로그램이 동시에 커널을 호출해도 문제가 없다. 커널은 여러 프로세서의 메모리 접근을 동기화하는 방법(스핀락 등)도 제공해야 한다. 이것은 메모리 관리와 프로세스 관리에 걸쳐 있는 문제이다.
5. 2. 메모리 관리
커널은 시스템의 모든 메모리에 무제한으로 접근할 수 있으며, 사용자 프로세스의 요청에 따라 안전하게 메모리 접근을 제공해야 한다. 이를 위해 페이징 방식이나 세그멘테이션 방식을 이용한 가상 주소 지정이 사용된다. 가상 메모리 방식에서 커널은 물리 주소를 다른 주소, 즉 가상 주소로 변환한다. 이를 통해 각 프로그램은 (커널을 제외하고는) 가상 공간상에서 유일한 코드로 보이며, 프로그램이 서로 다른 프로그램을 손상시키는 것을 방지한다.[68]많은 시스템에서 어떤 프로그램의 가상 주소는 메모리에 없는 데이터를 가리키는 경우가 있다. 가상 주소 지정에 의한 간접 지정 계층은 본래 주기억장치(RAM)에 있어야 할 데이터를 하드 디스크와 같은 보조 기억 장치에 저장하는 것을 가능하게 한다. 결과적으로 운영체제는 물리적인 용량보다 더 많은 메모리를 프로그램들에 제공할 수 있다. RAM에 없는 데이터가 어떤 프로그램에서 필요하게 되면, CPU는 커널에 그 사실을 알리고(페이지 폴트), (필요하다면) 커널이 사용하지 않는 메모리 블록의 내용을 디스크에 저장하고, 필요한 데이터를 그 메모리 블록에 복구시킨다(페이지 교체 알고리즘). 그러면 프로그램은 요청을 한 시점부터 처리를 재개할 수 있다. 이것을 요청 페이징이라고 한다.
가상 주소 지정 방식에서는 가상 공간을 커널용 부분(커널 공간)과 응용 프로그램용 부분(사용자 공간)으로 나눌 수 있다. 응용 프로그램은 커널용 메모리에 접근할 수 없으므로, 응용 프로그램에 버그가 있더라도 커널에 손상을 입히지 않는다. 이러한 근본적인 분리는 많은 범용 커널에서 실제로 사용되고 있지만, 다른 방식을 채택한 커널에 대한 연구도 진행되고 있다(예: Singularity).
메모리 관리의 또 다른 기능으로 커널 내 각 모듈이나 장치 드라이버가 사용하는 메모리의 할당(동적 메모리 할당)이 있다.
5. 3. 장치 관리
커널은 장치 드라이버를 통해 하드웨어 장치와 상호 작용하며, 사용자 프로그램에 추상화된 인터페이스를 제공한다.[6]프로세스가 유용한 기능을 수행하려면 커널이 장치 드라이버를 통해 제어하는, 컴퓨터에 연결된 주변 장치에 접근해야 한다. 장치 드라이버는 운영 체제를 대신하여 하드웨어 장치를 캡슐화하고, 모니터링하고, 제어하는 컴퓨터 프로그램이다. 운영 체제에 특정 하드웨어를 제어하고 통신하는 방법에 대한 API, 절차 및 정보를 제공한다. 장치 드라이버는 모든 운영 체제 및 해당 응용 프로그램에 중요하고 필수적인 의존성이다. 드라이버의 설계 목표는 추상화이며, 드라이버의 기능은 운영 체제에서 지정한 추상적인 함수 호출(프로그래밍 호출)을 장치별 호출로 변환하는 것이다. 이론적으로 적합한 드라이버를 사용하면 장치가 정상적으로 작동한다. 장치 드라이버는 비디오 카드, 사운드 카드, 프린터, 스캐너, 모뎀 및 네트워크 카드 등에 사용된다.[6]
하드웨어 및 소프트웨어 수준에서 장치 드라이버의 일반적인 추상화는 다음과 같다.
- 하드웨어 수준
- 직접 인터페이싱
- 고급 인터페이스 사용(비디오 BIOS)
- 저급 장치 드라이버 사용(디스크 드라이버를 사용하는 파일 드라이버)
- 하드웨어 작업을 시뮬레이션하는 동안 완전히 다른 작업 수행
- 소프트웨어 수준
- 운영 체제가 하드웨어 리소스에 직접 접근할 수 있도록 허용
- 원시 함수만 구현
- TWAIN과 같은 비드라이버 소프트웨어를 위한 인터페이스 구현
- 언어 구현(종종 포스트스크립트와 같은 고급 언어)
예를 들어, 사용자에게 화면에 무언가를 표시하려면 응용 프로그램이 커널에 요청하고, 커널은 해당 요청을 디스플레이 드라이버로 전달하며, 디스플레이 드라이버는 실제로 문자/픽셀을 표시하는 역할을 한다.[6]
커널은 사용 가능한 장치 목록을 유지해야 한다. 이 목록은 미리 알려져 있거나, 사용자가 구성하거나, 운영 체제가 런타임에 감지할 수 있다. 플러그 앤 플레이 시스템에서 장치 관리자는 먼저 PCI(주변 장치 상호 연결) 또는 USB(범용 직렬 버스)와 같은 다양한 주변 버스를 스캔하여 설치된 장치를 감지한 다음 적절한 드라이버를 검색한다.
장치 관리는 매우 OS 특정 주제이므로 이러한 드라이버는 각 커널 설계마다 다르게 처리되지만, 모든 경우에 커널은 드라이버가 일부 포트 또는 메모리 위치를 통해 물리적으로 장치에 액세스할 수 있도록 I/O를 제공해야 한다.
5. 4. 시스템 호출
사용자 프로그램이 커널의 서비스에 접근하려면 시스템 호출이라는 인터페이스를 사용해야 한다. 시스템 호출은 프로세스가 운영 체제 커널의 서비스를 요청하는 방식이며, 프로세스와 운영 체제 간의 인터페이스를 제공한다.[7]일반적으로 운영 체제는 C 라이브러리(예: glibc) 또는 API를 제공하여 사용자 프로그램이 커널 서비스에 접근할 수 있도록 한다. 이러한 라이브러리는 커널에 정보를 전달하고 수퍼바이저 모드로 전환하는 저수준 세부 사항을 처리한다. 시스템 콜에는 close, open, read, wait, write 등이 있다.[7]
메모리 격리가 사용 중인 경우, 사용자 프로세스가 커널을 직접 호출하는 것은 불가능하다. 따라서 다음과 같은 방법들을 사용하여 시스템 호출을 구현한다.
- 소프트웨어 시뮬레이션 인터럽트 사용: 대부분의 하드웨어에서 사용할 수 있는 일반적인 방법이다.
- 콜 게이트 사용: 프로세서가 알고 있는 커널 메모리 위치의 목록에 커널이 저장한 특수 주소를 사용한다.
- 특수 시스템 콜 명령어 사용: 일반적인 아키텍처(x86)에는 없을 수 있지만, 최근 x86 프로세서 모델에는 추가되었다.
- 메모리 기반 큐 사용: 요청 세부 정보를 메모리 영역에 추가하고, 커널이 주기적으로 스캔하여 요청을 처리한다.
커널은 컴퓨터 자원을 관리하고 다른 프로그램들이 이러한 자원을 사용할 수 있도록 한다.[59] 주요 자원에는 CPU, 메모리, 입출력 장치 등이 있다. 커널은 이러한 자원을 관리하고, 프로세스 간 동기화 및 프로세스 간 통신(IPC) 수단을 제공한다.
6. 커널 설계의 주요 쟁점
커널 설계에는 여러 가지 중요한 쟁점들이 있다.
- 오류 허용 및 악의적인 동작으로부터의 보호: 커널은 오류나 악의적인 공격으로부터 시스템을 보호해야 한다. 이를 위해 보호와 보안을 분리하거나, 계층적 보호 구조를 사용하지 않을 수 있다.[5]
- 보호 메커니즘: 커널은 다양한 기준에 따라 분류되는 보호 메커니즘을 제공한다.
분류 기준 | 내용 |
---|---|
적용 시점 | 정적(컴파일 시점(컴파일 시간)), 동적(런타임(런타임)) |
감지 방식 | 선제적, 사후 감지 |
보호 원칙 | 데닝의 원칙 등[8][9] |
지원 기반 | 하드웨어 지원, 언어 기반 |
메커니즘 유형 | 개방형, 바인딩 정책 |
- 계층적 보호 도메인: 일반적으로 CPU 모드를 사용하여 구현된다.[10]
- 권한: 커널은 사용자 코드에 제한된 접근 권한을 부여하는 "권한"을 제공한다.
- 예시: 파일 처리 (읽기, 쓰기, 삭제, 실행 등)
- 구현: 커널은 애플리케이션에 "파일 핸들"을 제공하고, 애플리케이션은 이 핸들을 통해 커널에 작업을 요청한다.
- 권한에 대한 하드웨어 지원: 메모리 관리 장치(MMU)를 사용하여 메모리 접근 권한을 확인하는 권한 기반 어드레싱을 사용한다.[11]
- 권한 시뮬레이션: 하드웨어 지원이 없는 경우, 페이지 테이블 조작 등을 통해 권한을 시뮬레이션할 수 있지만 성능에 영향을 미친다.[14]
- 언어 기반 보호: 신뢰할 수 있는 언어 컴파일러가 생성한 코드만 실행을 허용하는 방식이다.[78]
- 장점: 주소 공간 분리가 필요 없고, 유연성이 높다.
- 단점: 애플리케이션 실행 시간이 오래 걸리고, 형식 시스템이 고정된다.
- 예시: JX, 마이크로소프트 Singularity
- 프로세스 간 통신(IPC) 및 동기화: 커널은 프로세스 간 통신 및 동기화를 위한 방법을 제공한다.[5]
- 예시: 세마포어, 메시지 패싱, 공유 메모리, RPC
- 입출력(I/O) 장치 관리: 커널은 다양한 입출력 장치를 관리하고 추상화된 인터페이스를 제공한다.[5]
- 페르난도 코르바토와 브린치 한센은 입출력 장치를 "외부 프로세스"로 처리하는 개념을 제안했다.[25]
- 장치 드라이버나 하드웨어 추상화 계층(HAL)을 통해 장치 관리를 추상화한다.
- 응용 프로그램은 커널에 장치 접근을 요청하고, 커널은 요청을 해당 장치 드라이버에 전달한다. (IPC의 예시)
6. 1. 모놀리식 커널 대 마이크로커널 논쟁
1990년대 초, 모놀리식 커널은 구식으로 여겨졌다. 리누스 토르발스와 앤드류 타넨바움은 리눅스의 설계인 모놀리식 커널과 마이크로커널에 대한 논쟁(타넨바움-토르발즈 논쟁)을 벌였다.[35]타넨바움과 토르발스의 토론에서 제시된 두 진영의 의견은 각각 장단점이 있다.
두 진영 모두 성공 사례가 있다. 모놀리식 커널은 설계가 쉽고 마이크로커널 기반 시스템보다 빠르게 성장할 수 있다. 반면, 마이크로커널은 운영 체제의 각 구성 요소를 독립적으로 관리하고 메모리 공간을 보호할 수 있어 임베디드 로봇 산업이나 의료용 컴퓨터 등에 종종 이용된다. 이는 최신 모듈 로딩 방식을 사용하는 모놀리식 커널에서도 불가능하다.
Mach는 일반적인 용도의 마이크로커널로 알려져 있지만, 특별한 용도로 설계된 마이크로커널도 있다. L3는 마이크로커널이 느리지 않다는 것을 보여주기 위해 만들어졌다. L3의 후예인 L4는 Fiasco 구현으로 대중적이며, L4 프로세스들과 별도의 공간에서 리눅스를 구동할 수 있다.
QNX는 1980년 초에 등장한 운영 체제로, 극도로 최소화된 마이크로커널 설계를 채택했다. 이 시스템은 Mach가 목표로 했던 마이크로커널 이념을 더 성공적으로 달성했다. QNX는 우주 왕복선의 로봇 팔과 오차에 민감한 유리를 닦는 기계에도 적용되었다.
6. 2. 보호 (Protection)
커널 설계에서 중요한 고려 사항은 오류 허용(오류 허용 설계) 및 악의적인 동작(컴퓨터 보안)으로부터의 보호(protection)를 지원하는 것이다. 이 두 가지 측면은 일반적으로 명확하게 구분되지 않으며, 커널 설계에서 이러한 구분을 채택하면 계층적 보호 구조를 거부하게 된다.[5]커널이 제공하는 메커니즘이나 정책은 여러 기준에 따라 분류될 수 있다. 여기에는 정적(컴파일 시점(컴파일 시간)에 적용) 또는 동적(런타임(런타임)에 적용), 선제적 또는 사후 감지, 만족하는 보호 원칙(예: 데닝[8][9]), 하드웨어 지원 또는 언어 기반 여부, 개방형 메커니즘인지 바인딩 정책인지 여부 등이 포함된다.
계층적 보호 도메인[10]에 대한 지원은 일반적으로 CPU 모드를 사용하여 구현된다.
많은 커널은 "권한"의 구현을 제공하는데, 이는 사용자 코드에 제공되어 커널이 관리하는 기본 객체에 대한 제한된 액세스를 허용하는 객체이다. 일반적인 예는 파일 처리이다. 파일은 영구 저장 장치에 저장된 정보의 표현이다. 커널은 읽기, 쓰기, 삭제 또는 실행을 포함한 여러 가지 다른 작업을 수행할 수 있지만, 사용자 수준 애플리케이션은 이러한 작업 중 일부만 수행하도록 허용될 수 있다(예: 파일을 읽기만 허용될 수 있다). 일반적인 구현은 커널이 애플리케이션에 객체(일반적으로 "파일 핸들"이라고 함)를 제공하는 것이며, 애플리케이션은 이 객체에 대해 작업을 호출할 수 있으며, 커널은 작업이 요청될 때 유효성을 확인한다. 이러한 시스템은 커널이 관리하는 모든 객체와 실제로 다른 사용자 애플리케이션이 제공하는 객체로 확장될 수 있다.
권한에 대한 하드웨어 지원을 제공하는 효율적이고 간단한 방법은 메모리 관리 장치(MMU)에 모든 메모리 액세스에 대한 액세스 권한을 확인하는 책임을 위임하는 것으로, 이 메커니즘을 권한 기반 어드레싱이라고 한다.[11]
대안적인 접근 방식은 일반적으로 지원되는 계층적 도메인을 사용하여 권한을 시뮬레이션하는 것이다. 이 접근 방식에서 각 보호된 객체는 애플리케이션이 액세스할 수 없는 주소 공간에 상주해야 한다. 커널은 이러한 메모리에 권한 목록도 유지 관리한다. 애플리케이션이 권한으로 보호되는 객체에 액세스해야 할 때, 시스템 호출을 수행하고 커널은 애플리케이션의 권한이 요청된 작업을 수행할 수 있는 권한을 부여하는지 확인하고, 허용되는 경우 액세스를 수행한다(직접 또는 요청을 다른 사용자 수준 프로세스에 위임하여). 주소 공간 전환의 성능 비용은 객체 간의 복잡한 상호 작용이 있는 시스템에서 이 접근 방식의 실용성을 제한하지만, 자주 액세스되지 않거나 빠르게 수행될 것으로 예상되지 않는 객체에 대해 현재 운영 체제에서 사용된다.[12][13]
펌웨어가 보호 메커니즘을 지원하지 않는 경우, 예를 들어 페이지 테이블을 조작하여 권한을 시뮬레이션하는 등 더 높은 수준에서 보호를 시뮬레이션할 수 있지만, 성능에 영향을 미친다.[14] 그러나 언어 기반 보호를 사용하도록 선택한 시스템의 경우 하드웨어 지원 부족이 문제가 되지 않을 수 있다.[15]
중요한 커널 설계 결정은 보안 메커니즘과 정책을 구현해야 하는 추상화 수준을 선택하는 것이다. 커널 보안 메커니즘은 더 높은 수준에서 보안을 지원하는 데 중요한 역할을 한다.[11][19][16][17][18]
한 가지 방법은 펌웨어 및 커널 지원을 사용하여 오류 허용(위 참조)을 수행하고, 그 위에 악의적인 동작에 대한 보안 정책을 구축하는 것이다(필요한 경우 암호화 메커니즘과 같은 기능 추가). 일부 책임을 컴파일러에 위임한다. 보안 정책의 적용을 컴파일러 및/또는 애플리케이션 수준에 위임하는 접근 방식을 종종 ''언어 기반 보안''이라고 한다.
현재 주류 운영 체제의 많은 중요한 보안 메커니즘이 부족하여 애플리케이션 추상화 수준에서 적절한 보안 정책을 구현하는 데 장애가 된다.[19] Mars Research Group 개발자에 따르면, 격리가 부족한 것이 커널 보안을 저해하는 주요 요인 중 하나이다.[20]
대체 기법으로 언어 기반 보호가 있다. 언어 기반 보호 시스템에서는 커널이 신뢰할 수 있는 언어 컴파일러가 생성한 코드만 실행을 허용한다. 그리고 그 언어는 보안 위반이 되는 코드를 프로그래머가 작성할 수 없도록 설계되어 있다.[78]
이 방식에는 다음과 같은 장점이 있다.
- 주소 공간을 분리할 필요가 없다. 주소 공간의 전환은 느린 작업이며 오버헤드가 되므로, 현대 OS에서는 그 전환을 최대한 줄이도록 많은 노력을 기울이고 있다. 언어 기반 보호 시스템에서는 그러한 전환이 전혀 필요 없으며, 모든 코드를 동일한 주소 공간에 두더라도 안전하게 운영할 수 있다.
- 유연성이 있다. 프로그래밍 언어로 보호 메커니즘을 표현할 수 있도록 설계하면, 이 방식에서는 그것들을 구현할 수 있다. 언어 기반 보호를 구현하기 위해 하드웨어를 새로 설계할 필요가 없다.
반면, 다음과 같은 단점이 있다.
- 애플리케이션 실행에 시간이 걸린다. 애플리케이션을 실행할 때 올바른 컴파일러로 생성된 것인지, 또는 소스 코드나 바이트코드에서 재컴파일이 필요 없는지를 확인해야 한다.
- 형식 시스템이 고정된다. 기존 시스템에서는 애플리케이션이 type safety가 아닌 작업을 자주 실행한다. 언어 기반 보호 시스템에서는 그러한 작업은 허용되지 않으므로, 애플리케이션을 변경해야 하며, 경우에 따라 성능이 저하될 수 있다.
언어 기반 보호를 채택한 시스템으로는 JX와 마이크로소프트의 Singularity가 있다.
6. 3. 프로세스 협력
커널은 프로세스 간 통신(IPC)과 동기화를 위한 방법을 제공한다.[5] 이러한 구현은 커널 자체 내에 있거나 커널이 실행 중인 다른 프로세스에 의존할 수도 있다. 커널은 서로가 제공하는 기능에 대한 접근을 제공하기 위해 IPC를 제공해야 하지만, 실행 중인 프로그램이 이러한 기능에 대한 접근을 요청하는 방법도 제공해야 한다. 커널은 또한 프로세스나 스레드 간의 문맥 전환을 담당한다.에드거 다이크스트라는 논리적인 관점에서 이진 세마포어의 원자적인 락 및 언락 연산만으로 프로세스 간의 임의의 협조 동작을 구현할 수 있음을 증명했다.[24] 그러나 이러한 방식은 일반적으로 안전성과 효율성이 부족하며, 메시지 패싱 방식이 더 유연하다.[25] 다른 방식들도 몇 가지 있으며, 현대 커널에서는 공유 메모리나 RPC와 같은 시스템을 지원하는 경우가 많다.
6. 4. 입출력 장치 관리
커널은 키보드, 마우스, 디스크 드라이브, 프린터, USB 장치, 네트워크 어댑터, 디스플레이 장치 등 입출력(I/O) 장치를 관리한다. 응용 프로그램이 이러한 장치를 사용할 수 있도록 추상화된 인터페이스를 제공하여, 응용 프로그램이 장치의 구체적인 구현 세부 사항을 알 필요가 없도록 한다.[5]페르난도 코르바토가 처음 제안하고 브린치 한센이 구현한 개념에 따르면, 커널은 입출력 장치를 다른 프로세스와 마찬가지로 병렬 협력 프로세스로 처리한다. 한센은 "일반적인" 프로세스를 ''내부 프로세스'', 입출력 장치를 ''외부 프로세스''라고 불렀다.[25]
물리 메모리와 마찬가지로, 응용 프로그램이 장치 컨트롤러의 포트와 레지스터에 직접 접근하도록 허용하면 컨트롤러 오작동이나 시스템 충돌이 발생할 수 있다. 또한 장치의 복잡성으로 인해 프로그래밍이 복잡해질 수 있고, 여러 다른 컨트롤러를 사용할 수도 있다. 따라서 장치 관리를 위한 추상적인 인터페이스를 제공하는 것이 중요하며, 이는 일반적으로 장치 드라이버나 하드웨어 추상화 계층(HAL)을 통해 수행된다.
응용 프로그램은 장치에 대한 접근이 필요할 때 커널에 요청한다. 커널은 바이오스(BIOS)나 시스템 버스(PCI/PCIE, USB 등)를 통해 연결된 장치 목록을 유지한다. 응용 프로그램이 특정 장치 조작(예: 화면에 문자 표시)을 요청하면, 커널은 이 요청을 해당 장치 드라이버(예: 비디오 드라이버)에 전달하고, 드라이버는 요청을 수행한다. 이는 프로세스 간 통신(IPC)의 한 예이다.
참조
[1]
서적
Computer Systems: A Programmer's Perspective
Pearson
2016
[2]
웹사이트
Kernel
http://www.linfo.org[...]
Bellevue Linux Users Group
2016-09-15
[3]
문서
Daemon (computing)
[4]
문서
Roch 2004
[5]
문서
Wulf 1974
[6]
문서
Silberschatz 1991
[7]
서적
Modern Operating Systems
Prentice Hall
[8]
문서
Denning 1976
[9]
문서
Swift 2005
[10]
문서
Schroeder 72
[11]
문서
Linden 76
[12]
서적
IA-64 Linux Kernel: Design and Implementation
Prentice Hall PTR
2002
[13]
서적
Operating System Concepts
Silberschatz & Galvin
[14]
학술지
An implementation of capabilities on the PDP-11/45
1980-07
[15]
웹사이트
A Language-Based Approach to Security
https://www.cs.cmu.e[...]
[16]
학회
The persistent relevance of the local operating system to global applications
[17]
보고서
Computer Security Technology Planning Study
http://csrc.nist.gov[...]
Air Force Electronic Systems Division
1972-10
[18]
학술지
The protection of information in computer systems
http://web.mit.edu/S[...]
1975-09
[19]
학회
The Inevitability of Failure: The Flawed Assumption of Security in Modern Computing Environments
https://web.archive.[...]
1998-10
[20]
웹사이트
Fine-grained kernel isolation
https://mars-researc[...]
2022-09-15
[21]
뉴스
Automatic device driver isolation protects against bugs in operating systems
https://techxplore.c[...]
2022-09-15
[22]
웹사이트
KSplit: Automating Device Driver Isolation
https://www.cse.psu.[...]
2022
[23]
학술지
EROS
[24]
문서
Cooperating Sequential Processes
Math. Dep., Technological U., Eindhoven
1965-09
[25]
문서
Brinch Hansen 70
[26]
학술지
SHARER, a time sharing system for the CDC 6600
[27]
학회
Dynamic Supervisors - their design and construction
https://dl.acm.org/d[...]
[28]
문서
Baiardi 1988
[29]
문서
Levin 75
[30]
문서
Denning 1980
[31]
학회
The Immortality of Operating Systems, or: Is Research in Operating Systems still Justified?
https://link.springe[...]
1991
[32]
문서
Levy 84
[33]
문서
Levy 84
[34]
웹사이트
Open Sources: Voices from the Open Source Revolution
https://www.oreilly.[...]
1999-03-29
[35]
웹사이트
Recordings of the debate between Torvalds and Tanenbaum
http://www.dina.dk/~[...]
[36]
웹사이트
What Is Darwin (and How It Powers Mac OS X)
http://oreilly.com/p[...]
O'Reilly Media
2008-12-09
[37]
웹사이트
Operating Systems/Kernel Models - Wikiversity
https://en.wikiversi[...]
2014-12-18
[38]
문서
Liedtke 95
[39]
문서
Härtig 97
[40]
문서
Hansen 73, section 7.3 p.233 "interactions between different levels of protection require transmission of messages by value"
[41]
영상매체
WWDC 2000 Session 106 – Mac OS X: Kernel
https://www.youtube.[...]
[42]
웹사이트
KeyKOS Nanokernel Architecture
http://www.cis.upenn[...]
[43]
학술대회
The Multikernel: a new OS architecture for scalable multicore systems
https://www.sigops.o[...]
2009
[44]
웹사이트
The Barrelfish operating system
https://barrelfish.o[...]
[45]
서적
Ball: Embedded Microprocessor Designs, p. 129
[46]
서적
Hansen 2001 (os), pp.17–18
[47]
웹사이트
BSTJ version of C.ACM Unix paper
http://cm.bell-labs.[...]
2006-08-17
[48]
학술대회
Introduction and Overview of the Multics System
http://www.multician[...]
[49]
웹사이트
The Single Unix Specification
https://www.unix.org[...]
The Open Group
2016-09-29
[50]
웹사이트
Unix's Revenge
http://www.asymco.co[...]
2010-09-29
[51]
웹사이트
Linux Kernel 2.6: It's Worth More!
https://dwheeler.com[...]
2004-10-12
[52]
웹사이트
Bona Fide OS Development
http://www.osdever.n[...]
[53]
웹사이트
XNU: The Kernel
http://www.kernelthr[...]
2003-12
[54]
웹사이트
Windows - Official Site for Microsoft Windows 10 Home & Pro OS, laptops, PCs, tablets & more
http://windows.com/
2019-03-24
[55]
웹사이트
The L4 microkernel family - Overview
http://os.inf.tu-dre[...]
2006-08-11
[56]
웹사이트
The Fiasco microkernel - Overview
http://os.inf.tu-dre[...]
2006-07-10
[57]
웹사이트
L4Ka - L4Ka Project
http://www.l4ka.org/
2013-12-07
[58]
웹사이트
QNX Operating Systems
http://blackberry.qn[...]
2019-03-24
[59]
서적
Wulf 1974, pp. 337–345
[60]
웹사이트
An overview of Monolithic and Micro Kernels
http://osdever.net/t[...]
[61]
서적
Roch 2004
[62]
문서
최上位의 특권레벨은, 슈퍼바이저모드, 커널모드, CPL0, 링0 등 여러가지 호칭이 있다.
[63]
웹사이트
Bona Fide OS Development - Bran's Kernel Development Tutorial
http://osdever.net/b[...]
[64]
문서
CPU시간은 이론상 무한하지만 메모리 용량과 그 접근 속도는 유한하다는 점에 주의해야 한다.
[65]
문서
디바이스 드라이버를 커널의 일부로 간주하지 않는 생각도 있지만, 예를 들어 리얼타임 클록은 커널 자신이 관리한다.
[66]
서적
Levy 1984, p. 5
[67]
논문
Domains of protection and the management of processes
http://comjnl.oxford[...]
1974-05
[68]
서적
Silberschatz 1991
[69]
웹사이트
http://www.answers.c[...]
[70]
서적
Modern Operating Systems
Prentice Hall
[71]
논문
[72]
논문
[73]
논문
[74]
논문
[75]
서적
Virtual Memory in the IA-64 Linux Kernel
http://www.informit.[...]
Prentice Hall PTR
[76]
논문
[77]
저널
An implementation of capabilities on the PDP-11/45
http://portal.acm.or[...]
2007-01-07
[78]
웹사이트
A Language-Based Approach to Security
https://www.cs.cmu.e[...]
[79]
간행물
The Persistent Relevance of the Local Operating System to Global Applications
http://dl.acm.org/ci[...]
[80]
보고서
Computer Security Technology Planning Study
http://csrc.nist.gov[...]
Air Force Elect. Systems Div.
[81]
저널
The protection of information in computer systems
http://web.mit.edu/S[...]
September 1975
[82]
간행물
The Inevitability of Failure: The Flawed Assumption of Security in Modern Computing Environments
http://csrc.nist.gov[...]
[83]
저널
EROS: a fast capability system
http://portal.acm.or[...]
[84]
문서
Cooperating Sequential Processes
[85]
논문
[86]
웹사이트
SHARER, a time sharing system for the CDC 6600
http://dl.acm.org/ci[...]
2007-01-07
[87]
웹사이트
Dynamic Supervisors – their design and construction
http://dl.acm.org/ci[...]
2007-01-07
[88]
논문
[89]
논문
[90]
논문
[91]
논문
The Immortality of Operating Systems, or: Is Research in Operating Systems still Justified?
http://portal.acm.or[...]
[92]
논문
[93]
논문
[94]
서적
Open Sources: Voices from the Open Source Revolution
http://oreilly.com/c[...]
[95]
문서
仮想アドレッシングは通常、メモリ管理ユニット (MMU) に内蔵された機能を使用して実現される。
[96]
문서
そもそも何故カーネルが大きくなるとまずいのか? 一般にOSはある程度のハードウェアシリーズで動作するが、その最小メモリサイズは最も安価なハードウェアの最小構成まで考慮する必要があり、そのようなメモリ容量でもある程度の機能が動作しなければならない。このため、少なくとも一般的な構成のカーネルがその最小メモリ容量内に収まって、アプリケーションをそれなりの性能で実行できるだけの空きメモリ容量を確保しなければならないという事情があった。最近ではメモリチップの急速な大容量化によって、このような問題は減りつつある。
[97]
웹사이트
Linus vs. Tanenbaum, LINUX is obsolete - comp.os.minix, Appendix A The Tanenbaum-Torvalds Debate
http://www.dina.dk/~[...]
[98]
웹사이트
What Is Darwin (and How It Powers Mac OS X)
http://oreilly.com/p[...]
O'Reilly Media
2012-09-30
[99]
논문
[100]
논문
[101]
논문
[102]
웹사이트
The L4 microkernel family – Overview
http://os.inf.tu-dre[...]
[103]
웹사이트
KeyKOS Nanokernel Architecture
http://www.cis.upenn[...]
[104]
논문
[105]
논문
[106]
웹사이트
BSTJ version of C.ACM Unix paper
http://cm.bell-labs.[...]
[107]
웹사이트
Introduction and Overview of the Multics System
http://www.multician[...]
[108]
웹사이트
The UNIX System — The Single Unix Specification
http://www.unix.org/[...]
[109]
웹사이트
Unix’s Revenge
http://www.asymco.co[...]
[110]
웹사이트
Linux Kernel 2.6: It's Worth More!
http://www.dwheeler.[...]
2004-10-12
[111]
웹사이트
XNU: The Kernel
http://osxbook.com/b[...]
[112]
웹사이트
Windows History: Windows Desktop Products History
http://www.microsoft[...]
[113]
웹사이트
The Fiasco microkernel - Overview
http://os.inf.tu-dre[...]
[114]
웹사이트
L4Ka - The L4 microkernel family and friends
http://www.l4ka.org
[115]
웹사이트
QNX Realtime Operating System Overview
http://www.qnx.com/p[...]
[116]
웹인용
Kernel
http://www.linfo.org[...]
Bellevue Linux Users Group
2016-09-15
[117]
웹사이트
컴퓨터인터넷IT용어대사전-핵심
https://terms.naver.[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com